package com.neteast.androidclient.contact.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import android.content.Context;
import android.os.Environment;

public class FileUtil {
	/**
	 * 将json写入zip文件
	 * @param context
	 * @param fileName
	 * @param content
	 * @return
	 * @throws IOException
	 */
	public static String saveJsontoFile(Context context,String fileName,String content) throws IOException {
		String dir = createDir(context);
		File file=new File(dir, fileName+".zip");
		file.getParentFile().mkdirs();
		if (file.exists()) {
			file.delete();
		}
		file.createNewFile();
		FileOutputStream fos=new FileOutputStream(file);
		CheckedOutputStream cos=new CheckedOutputStream(fos, new CRC32());
		ZipOutputStream zos=new ZipOutputStream(cos);
		zos.putNextEntry(new ZipEntry(fileName+".txt"));
		zos.write(content.getBytes());
		zos.close();
		return file.getAbsolutePath();
	}
	
	/**
	 * 生成文件，若存在同名的，则删除老的
	 * @param context
	 * @param _id
	 * @return
	 * @throws IOException
	 */
	public static File createFile(Context context,String fileName) throws IOException {
		String dir = createDir(context);
		File file=new File(dir, fileName);
		file.getParentFile().mkdirs();
		if (file.exists()) {
			file.delete();
		}
		file.createNewFile();
		return file;
	}
	/**
	 * 生成联系人的头像文件，可指定格式为png和jpg两种
	 * 以联系人的contactId命名，若已经存在，则删除老的
	 * @param context
	 * @param contactId
	 * @param format
	 * @return
	 * @throws IOException
	 */
	public static File createPhotoFile(Context context,int contactId,String format) throws IOException{
		return createFile(context, "photo/"+contactId+"."+format);
	}
	/**
	 * 生成联系人的头像文件，为png格式
	 * 以联系人的contactId命名，若已经存在，则删除老的
	 * @param context
	 * @param contactId
	 * @return
	 * @throws IOException
	 */
	public static File createPhotoFile(Context context) throws IOException{
		return createFile(context, "photo/"+System.currentTimeMillis()+".png");
	}
	/**
	 * 得到存储文件的文件夹
	 * @param context
	 * @return
	 */
	public static String createDir(Context context) {
		String dir=null;
		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
			dir=Environment.getExternalStorageDirectory().getAbsolutePath();
		}else {
			dir=context.getFilesDir().toString();
		}
		return dir;
	}
	/**
	 * 给文件改名
	 * 因为java的更名方法有bug，所以自己写
	 * @param context
	 * @param contactId
	 * @return
	 * @throws Exception
	 */
	public static String renameFile(Context context,int contactId) throws Exception{
		File newfile = createPhotoFile(context);
		File oldFile=new File(createDir(context), "photo/0.png");
		if (oldFile.exists()&&oldFile.isFile()) {
			FileInputStream fis=new FileInputStream(oldFile);
			FileOutputStream fos=new FileOutputStream(newfile);
			byte[] data = JsonUtil.getDataFromInputStream(fis);
			fos.write(data);
			fos.close();
			oldFile.delete();
			return newfile.getAbsolutePath();
		}
		return null;
	}
	
	public static String rename(Context context,int contactId) throws IOException{
		File newfile = createPhotoFile(context);
		File oldFile=new File(createDir(context), "photo/0.png");
		oldFile.renameTo(newfile);
		return newfile.getAbsolutePath();
	}
}
